package com.luo.stock.controller;

import com.luo.stock.service.StockService;
import com.luo.stock.vo.resp.PageResult;
import com.luohai.stock.pojo.domain.*;
import com.luohai.stock.pojo.vo.R;
import com.luohai.stock.pojo.vo.stockOuterMarketVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * @Description
 * @Author 奥观海
 * @Date 2024/9/16
 */
@RestController
@RequestMapping("/api/quot")
@Api(tags = "股票相关的接口")
public class StockController {
    @Autowired
    private StockService stockService;

    /**获得最新大盘指数
     *
     * @return
     */
    @ApiOperation("获得最新国内大盘指数")
    @GetMapping("/index/all")
    public R<List<InnerMarketDomain>> getIndexAll(){
        return stockService.getIndexAll();
    }
    /**获得最新大盘指数
     *
     * @return
     */
    @ApiOperation("获得最新国外大盘指数")
    @GetMapping("/external/index")
    public R<List<stockOuterMarketVo>> getOuterMarket(){
        return stockService.getOuterMarket();
    }

    /**获得最新的板块行情数据
     *
     * @return
     */
    @ApiOperation("获得最新的板块行情数据")
    @GetMapping("/sector/all")
    public R<List<StockBlockDomain>> getSectorAll(){
        return stockService.getSectorAll();
    }

    /**
     * 分页查询最新股票交易数据
     * @param page 页码
     * @param pageSize 每页大小
     * @return
     */
    @ApiOperation("分页查询最新股票交易数据")
    @GetMapping("/stock/all")
    public R<PageResult<StockUpdownDomain>> getStockPage(
            @RequestParam(name = "page",required = false,defaultValue = "1") Integer page,
            @RequestParam(name = "pageSize",required = false,defaultValue = "20") Integer pageSize){
        return stockService.getStockPage(page,pageSize);
    }

    /**
     * 统计沪深两市个股最新交易数据，并按涨幅降序排序查询前4条数据
     * @return
     */
    @ApiOperation("统计沪深两市个股最新交易数据，并按涨幅降序排序查询前4条数据 ")
    @GetMapping("/stock/increase")
    public R<List<StockUpdownDomain>> getStock4Increase(){
        return stockService.getStock4Increase();
    }

    /**
     * 导出最新交易数据的export
     * @param page 页码
     * @param pageSize 每页大小
     */
    @ApiOperation("导出最新交易数据的export")
    @GetMapping("/stock/export")
    public void stockExport(@RequestParam(name = "page",required = false,defaultValue = "1") Integer page,
                            @RequestParam(name = "pageSize",required = false,defaultValue = "20") Integer pageSize
    , HttpServletResponse response){
        stockService.stockExport(page,pageSize,response);
    }

    /**
     * 统计A股大盘T日和T-1日成交量对比功能
     * @return
     */
    @ApiOperation("统计A股大盘T日和T-1日成交量对比功能")
    @GetMapping("/stock/tradeAmt")
    public R<Map<String,List>>  getTradeAmt(){
        return stockService.getTradeAmt();
    }

    /**
     * A股在各个涨跌区间股票的数量
     * @return
     */
    @ApiOperation("A股在各个涨跌区间股票的数量")
    @GetMapping("/stock/updown")
    public R<Map> getStockeUpdown(){
        return stockService.getStockeUpdown();
    }

    /**
     * 统计最新交易日下股票每分钟涨跌停的数量
     * @return
     */
    @ApiOperation("统计最新交易日下股票每分钟涨跌停的数量")
    @GetMapping("/stock/updown/count")
    public R<Map> getStockUpdownCount(){
        return stockService.getStockUpdownCount();
    }

    /**
     * 统计指定股票T日每分钟的交易数据
     * @param code 个股编码
     * @return
     */
    @ApiOperation("统计指定股票T日每分钟的交易数据")
    @GetMapping("/stock/screen/time-sharing")
    public R<List<Stock4MinuteDomain>> getTimeSharing(@RequestParam("code") String code){
       return stockService.getTimeSharing(code);
    }
    /**
     * 查询指定股票每天产生的数据
     * @param code 个股编码
     * @return
     */
    @ApiOperation("查询指定股票每天产生的数据")
    @GetMapping("/stock/screen/dkline")
    public R<List<Stock4EvrDayDomain>> getDkline(@RequestParam("code") String code){
return stockService.getDkline(code);
    }
    /**
     * 根据输入的个股代码，进行模糊查询，返回证券代码和证券名称
     * @param searchStr 个股编码
     * @return
     */
    @ApiOperation("根据输入的个股代码，进行模糊查询，返回证券代码和证券名称")
    @GetMapping("/stock/search")
    public R<List<Map>> getSearch(@RequestParam("searchStr") String searchStr){
        return stockService.getSearch(searchStr);
    }
    /**
     * 个股描述功能实现
     * @param code 个股编码
     * @return
     */
    @ApiOperation("个股描述功能实现")
    @GetMapping("/stock/describe")
    public R<StockBusinessDomain> getDescribe(@RequestParam("code") String code){
        return stockService.getDescribe(code);
    }
    /**
     * 个股周K线功能实现
     * @param code 个股编码
     * @return
     */
    @ApiOperation("个股周K线功能实现")
    @GetMapping("/stock/screen/weekkline")
    public R<List<InnerStockWeekDomain>> getWeekkline(@RequestParam("code") String code){
        return stockService.getWeekkline(code);
    }
    /**
     * 个股最新分时行情数据
     * @param code 个股编码
     * @return
     */
    @ApiOperation("个股最新分时行情数据")
    @GetMapping("/stock/screen/second/detail")
    public R<InnerStockDomain> getSecondDetail(@RequestParam("code") String code){
        return stockService.getSecondDetail(code);
    }
    /**
     * 个股最新分时行情数据
     * @param code 个股编码
     * @return
     */
    @ApiOperation("个股最新分时行情数据")
    @GetMapping("/stock/screen/second")
    public R<List<StockWaterDomain>> getscreenSecond(@RequestParam("code") String code){
        return stockService.getscreenSecond(code);
    }
}
